sysroot-upgrader: Check merge deployment, not ref for differences
authorColin Walters <walters@verbum.org>
Mon, 31 Mar 2014 18:41:13 +0000 (14:41 -0400)
committerColin Walters <walters@verbum.org>
Mon, 31 Mar 2014 18:41:13 +0000 (14:41 -0400)
Otherwise this broke atomicity; we could fetch/store the ref, then
crash, and then not upgrade the next time we tried upgrading.

The correct model is: the tree has changed if the new ref is different
from the merge deployment.

src/libostree/ostree-sysroot-upgrader.c

index b95c448d5cc41b5421837b2ef903182605377fbf..c262f2b802bd88b4d28322840142dac58a791d58 100644 (file)
@@ -431,7 +431,7 @@ ostree_sysroot_upgrader_pull (OstreeSysrootUpgrader  *self,
   gboolean ret = FALSE;
   gs_unref_object OstreeRepo *repo = NULL;
   char *refs_to_fetch[] = { self->origin_ref, NULL };
-  gs_free char *from_revision = NULL;
+  const char *from_revision = NULL;
   gs_free char *new_revision = NULL;
   gs_free char *origin_refspec = NULL;
 
@@ -443,9 +443,8 @@ ostree_sysroot_upgrader_pull (OstreeSysrootUpgrader  *self,
   else
     origin_refspec = g_strdup (self->origin_ref);
 
-  if (!ostree_repo_resolve_rev (repo, origin_refspec, TRUE, &from_revision,
-                                error))
-    goto out;
+  g_assert (self->merge_deployment);
+  from_revision = ostree_deployment_get_csum (self->merge_deployment);
 
   if (self->origin_remote)
     {